**These are my notes on the Kickle Cubicle Password system**

[Password Generation]

$CC-$D3
 
 1   2   3   4   5   6   7   8
$CC-$CD-$CE-$CF $D0-$D1-$D2-$D3
|             | |             | 
|--Password---| |--Ctrl Code--|

$8706 LDY #$00
$8708 LDA $D1
$870A AND #$01
$870C BEQ $8710
$870E LDY #$04 <--- 1st or 2nd page of the Codes Table (1st = 0x00, 2nd = 0x04)
$8710 LDX #$04 
$8712 RTS

$86F8 LDA $CB,X @ $00CF = #$03
$86FA SBC $8713,Y @ $8717 = #$10
$86FD AND #$1F
$86FF STA $CB,X @ $00CF = #$03
$8701 INY
$8702 DEX
$8703 BNE $86F7
$8705 RTS

unsigned char CodesTable[] = {0x01, 0x16, 0x13, 0x05, 0x10, 0x02, 0x17, 0x04};

$86B0 LDA #$00
$86B2 TAX
$86B3 EOR $CC,X @ $00CC = #$1C
$86B5 INX
$86B6 CPX #$04
$86B8 BNE $86B3
$86BA RTS

Pwd[0] XOR Pwd[1] XOR Pwd[2] XOR Pwd[3] = $D0

$86BB:A9 00     LDA #$00
$86BD:AA        TAX
$86BE:18        CLC
$86BF:75 CC     ADC $CC,X @ $00D0 = #$04
$86C1:E8        INX
$86C2:E0 04     CPX #$04
$86C4:D0 F8     BNE $86BE
$86C6:85 16     STA $16 = #$6E
$86C8:4A        LSR
$86C9:4A        LSR
$86CA:4A        LSR
$86CB:4A        LSR
$86CC:4A        LSR
$86CD:A8        TAY
$86CE:A5 16     LDA $16 = #$6E
$86D0:29 1F     AND #$1F
$86D2:60        RTS

(((Pwd[0] + Pwd[1] + Pwd[2] + Pwd[3]) >>= 5) &= 0x1F) = $D1

Y = (Pwd[0] + Pwd[1] + Pwd[2] + Pwd[3]) >>= 5)

$86D3:A5 D1     LDA $D1 = #$0E
$86D5:38        SEC
$86D6:E9 07     SBC #$07
$86D8:B0 FB     BCS $86D5
$86DA:69 07     ADC #$07
$86DC:AA        TAX
$86DD:B5 CC     LDA $CC,X @ $00CC = #$1A
$86DF:49 1F     EOR #$1F

$86F4 JSR $8706

$85DB JSR $86F4

$85DE JSR $86B0
$85E1 CMP $D0 = #$04
$85E3 BNE $85F5

$85E5 JSR $86BB
$85E8 CMP $D1 = #$05
$85EA BNE $85F5
$85EC CPY $D2 = #$06
$85EE BNE $85F5

$85F0 JSR $86D3
$85F3 CMP $D3 = #$07
$85F5 PHP
$85F6 JSR $86E2
$85F9 PLP
$85FA RTS

$86D3:A5 D1     LDA $D1 = #$0E
$86D5:38        SEC
$86D6:E9 07     SBC #$07
$86D8:B0 FB     BCS $86D5
$86DA:69 07     ADC #$07
$86DC:AA        TAX
$86DD:B5 CC     LDA $CC,X @ $00D0 = #$04
$86DF:49 1F     EOR #$1F

$8620:20 2F 86  JSR $862F
$8623:8D 0A 01  STA $010A = #$00 <-- ZONE
$8626:A0 06     LDY #$06
$8628:20 2F 86  JSR $862F
$862B:8D 0B 01  STA $010B = #$00 <-- LEVEL

00,00,08,20,04,0E,03,05 <- FINAL
--------------------------------
1F,0D,11,00,04,0E,03,05 <- INIT
1A,1A,1B,1F,04,0E,03,05 <- UNMASKED


$8310:A9 09     LDA #$09

***To obtain the level and zone***

$8706:A0 00     LDY #$00
$8708:A5 D1     LDA $D1 = #$0E
$870A:29 01     AND #$01
$870C:F0 02     BEQ $8710
$870E:A0 04     LDY #$04
$8710:A2 04     LDX #$04
$8712:60        RTS

$86F7:38        SEC
$86F8:B5 CB     LDA $CB,X @ $00CF = #$00
$86FA:F9 13 87  SBC $8713,Y @ $8713 = #$01
$86FD:29 1F     AND #$1F
$86FF:95 CB     STA $CB,X @ $00CF = #$00
$8701:C8        INY
$8702:CA        DEX
$8703:D0 F2     BNE $86F7
$8705:60        RTS

$85FE:A2 03     LDX #$03
$8600:B5 CB     LDA $CB,X @ $00CB = #$83
$8602:55 CC     EOR $CC,X @ $00CC = #$1A
$8604:0A        ASL
$8605:0A        ASL
$8606:0A        ASL
$8607:95 CC     STA $CC,X @ $00CC = #$1A
$8609:CA        DEX
$860A:D0 F4     BNE $8600
$860C:06 CC     ASL $CC = #$1A
$860E:06 CC     ASL $CC = #$1A
$8610:06 CC     ASL $CC = #$1A
$8612:A9 05     LDA #$05
$8614:85 16     STA $16 = #$6E
$8616:A0 06     LDY #$06

$8618:20 2F 86  JSR $862F (NOTE 1)
$861B:8D 01 01  STA $0101 = #$00
$861E:A0 03     LDY #$03
$8620:20 2F 86  JSR $862F(NOTE 1)
$8623:8D 0A 01  STA $010A  <-- Zone
$8626:A0 06     LDY #$06
$8628:20 2F 86  JSR $862F(NOTE 1)
$862B:8D 0B 01  STA $010B  <-- Level

(NOTE 1)
$862F:A9 00     LDA #$00
$8631:16 CC     ASL $CC,X @ $00CC = #$D0
$8633:2A        ROL
$8634:C6 16     DEC $16 = #$05
$8636:D0 07     BNE $863F
$8638:48        PHA
$8639:E8        INX
$863A:A9 05     LDA #$05
$863C:85 16     STA $16 = #$05
$863E:68        PLA
$863F:88        DEY
$8640:D0 EF     BNE $8631
$8642:60        RTS

**Original Password Generator**

$8652:AD 01 01  LDA $0101 <-- Unused in american version (Position in map, japanese version)
$8655:20 9C 86  JSR $869C
$8658:A0 03     LDY #$03
$865A:AD 0A 01  LDA $010A <-- Zone
$865D:20 99 86  JSR $8699
$8660:A0 06     LDY #$06
$8662:AD 0B 01  LDA $010B <-- Level
$8665:20 9C 86  JSR $869C



$8673:A0 05     LDY #$05
$8675:20 9D 86  JSR $869D

$8678:A2 00     LDX #$00
$867A:B5 CC     LDA $CC,X @ $00CC = #$00
$867C:55 CD     EOR $CD,X @ $00CD = #$00
$867E:95 CD     STA $CD,X @ $00CD = #$00
$8680:E8        INX
$8681:E0 03     CPX #$03
$8683:D0 F5     BNE $867A

$8685:20 B0 86  JSR $86B0
$8688:85 D0     STA $D0 = #$00
$868A:20 BB 86  JSR $86BB
$868D:85 D1     STA $D1 = #$00
$868F:84 D2     STY $D2 = #$00
$8691:20 D3 86  JSR $86D3
$8694:85 D3     STA $D3 = #$00
$8696:4C E2 86  JMP $86E2

$86E2:20 06 87  JSR $8706
$86E5:18        CLC
$86E6:B5 CB     LDA $CB,X @ $00CF = #$0D
$86E8:79 13 87  ADC $8713,Y @ $8715 = #$13
$86EB:29 1F     AND #$1F
$86ED:95 CB     STA $CB,X @ $00CF = #$0D
$86EF:C8        INY
$86F0:CA        DEX
$86F1:D0 F2     BNE $86E5
$86F3:60        RTS
*-*-*-*-*-*-*-*-*-*-*-*-*-*
$8699:0A        ASL
$869A:0A        ASL
$869B:0A        ASL
$869C:0A        ASL <--
$869D:0A        ASL <--
$869E:0A        ASL
$869F:36 CC     ROL $CC,X @ $00CC = #$00
$86A1:C6 16     DEC $16 = #$05
$86A3:D0 07     BNE $86AC
$86A5:48        PHA
$86A6:E8        INX
$86A7:A9 05     LDA #$05
$86A9:85 16     STA $16 = #$05
$86AB:68        PLA
$86AC:88        DEY
$86AD:D0 EF     BNE $869E
$86AF:60        RTS

02 00 03 0E 10 04 02 0F

$86B0:A9 00     LDA #$00
$86B2:AA        TAX
$86B3:55 CC     EOR $CC,X @ $00CF = #$0D
$86B5:E8        INX
$86B6:E0 04     CPX #$04
$86B8:D0 F9     BNE $86B3
$86BA:60        RTS

$86BB:A9 00     LDA #$00
$86BD:AA        TAX
$86BE:18        CLC
$86BF:75 CC     ADC $CC,X @ $00D0 = #$10
$86C1:E8        INX
$86C2:E0 04     CPX #$04
$86C4:D0 F8     BNE $86BE

$86C6:85 16     STA $16 = #$05
$86C8:4A        LSR
$86C9:4A        LSR
$86CA:4A        LSR
$86CB:4A        LSR
$86CC:4A        LSR
$86CD:A8        TAY
$86CE:A5 16     LDA $16 = #$05
$86D0:29 1F     AND #$1F
$86D2:60        RTS

$86D3:A5 D1     LDA $D1 = #$04
$86D5:38        SEC
$86D6:E9 07     SBC #$07
$86D8:B0 FB     BCS $86D5
$86DA:69 07     ADC #$07
$86DC:AA        TAX
$86DD:B5 CC     LDA $CC,X @ $00D0 = #$10
$86DF:49 1F     EOR #$1F
$86E1:60        RTS

$86E2:20 06 87  JSR $8706
$86E5:18        CLC
$86E6:B5 CB     LDA $CB,X @ $00CF = #$0D
$86E8:79 13 87  ADC $8713,Y @ $8715 = #$13
$86EB:29 1F     AND #$1F
$86ED:95 CB     STA $CB,X @ $00CF = #$0D
$86EF:C8        INY
$86F0:CA        DEX
$86F1:D0 F2     BNE $86E5
$86F3:60        RTS